home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.text;
-
- import java.awt.Rectangle;
- import java.util.BitSet;
- import java.util.Vector;
- import javax.swing.SizeRequirements;
- import javax.swing.text.html.HTML.Attribute;
-
- public abstract class TableView extends BoxView {
- int[] columnSpans;
- int[] columnOffsets;
- SizeRequirements[] columnRequirements;
- Vector rows = new Vector();
- boolean gridValid = false;
- private static final BitSet EMPTY = new BitSet();
-
- public TableView(Element var1) {
- super(var1, 1);
- }
-
- // $FF: synthetic method
- static BitSet access$0() {
- return EMPTY;
- }
-
- void addFill(int var1, int var2) {
- TableRow var3 = this.getRow(var1);
- if (var3 != null) {
- var3.fillColumn(var2);
- }
-
- }
-
- void calculateColumnRequirements(int var1) {
- boolean var2 = false;
- int var3 = this.getRowCount();
-
- for(int var4 = 0; var4 < var3; ++var4) {
- TableRow var5 = this.getRow(var4);
- int var6 = 0;
- int var7 = ((CompositeView)var5).getViewCount();
-
- for(int var8 = 0; var8 < var7; ++var6) {
- View var9;
- for(var9 = ((CompositeView)var5).getView(var8); var5.isFilled(var6); ++var6) {
- }
-
- this.getRowsOccupied(var9);
- int var11 = this.getColumnsOccupied(var9);
- if (var11 == 1) {
- this.checkSingleColumnCell(var1, var6, var9);
- } else {
- var2 = true;
- var6 += var11 - 1;
- }
-
- ++var8;
- }
- }
-
- if (var2) {
- for(int var12 = 0; var12 < var3; ++var12) {
- TableRow var13 = this.getRow(var12);
- int var14 = 0;
- int var15 = ((CompositeView)var13).getViewCount();
-
- for(int var16 = 0; var16 < var15; ++var14) {
- View var10;
- for(var10 = ((CompositeView)var13).getView(var16); var13.isFilled(var14); ++var14) {
- }
-
- int var17 = this.getColumnsOccupied(var10);
- if (var17 > 1) {
- this.checkMultiColumnCell(var1, var14, var17, var10);
- var14 += var17 - 1;
- }
-
- ++var16;
- }
- }
- }
-
- }
-
- protected SizeRequirements calculateMinorAxisRequirements(int var1, SizeRequirements var2) {
- this.updateGrid();
- this.calculateColumnRequirements(var1);
- if (var2 == null) {
- var2 = new SizeRequirements();
- }
-
- long var3 = 0L;
- long var5 = 0L;
- long var7 = 0L;
-
- for(int var9 = 0; var9 < this.columnRequirements.length; ++var9) {
- SizeRequirements var10 = this.columnRequirements[var9];
- var3 += (long)var10.minimum;
- var5 += (long)var10.preferred;
- var7 += (long)var10.maximum;
- }
-
- var2.minimum = (int)var3;
- var2.preferred = (int)var5;
- var2.maximum = (int)var7;
- var2.alignment = 0.0F;
- return var2;
- }
-
- void checkMultiColumnCell(int var1, int var2, int var3, View var4) {
- long var5 = 0L;
- long var7 = 0L;
- long var9 = 0L;
-
- for(int var11 = 0; var11 < var3; ++var11) {
- SizeRequirements var12 = this.columnRequirements[var2 + var11];
- var5 += (long)var12.minimum;
- var7 += (long)var12.preferred;
- var9 += (long)var12.maximum;
- }
-
- int var20 = (int)var4.getMinimumSpan(var1);
- if ((long)var20 > var5) {
- SizeRequirements[] var13 = new SizeRequirements[var3];
-
- for(int var14 = 0; var14 < var3; ++var14) {
- SizeRequirements var15 = var13[var14] = this.columnRequirements[var2 + var14];
- var15.maximum = Math.max(var15.maximum, (int)var4.getMaximumSpan(var1));
- }
-
- int[] var23 = new int[var3];
- int[] var16 = new int[var3];
- SizeRequirements.calculateTiledPositions(var20, (SizeRequirements)null, var13, var16, var23);
-
- for(int var17 = 0; var17 < var3; ++var17) {
- SizeRequirements var18 = var13[var17];
- var18.minimum = Math.max(var23[var17], var18.minimum);
- var18.preferred = Math.max(var18.minimum, var18.preferred);
- var18.maximum = Math.max(var18.preferred, var18.maximum);
- }
- }
-
- int var21 = (int)var4.getPreferredSpan(var1);
- if ((long)var21 > var7) {
- SizeRequirements[] var22 = new SizeRequirements[var3];
-
- for(int var24 = 0; var24 < var3; ++var24) {
- SizeRequirements var25 = var22[var24] = this.columnRequirements[var2 + var24];
- }
-
- int[] var26 = new int[var3];
- int[] var27 = new int[var3];
- SizeRequirements.calculateTiledPositions(var21, (SizeRequirements)null, var22, var27, var26);
-
- for(int var28 = 0; var28 < var3; ++var28) {
- SizeRequirements var19 = var22[var28];
- var19.preferred = Math.max(var26[var28], var19.preferred);
- var19.maximum = Math.max(var19.preferred, var19.maximum);
- }
- }
-
- }
-
- void checkSingleColumnCell(int var1, int var2, View var3) {
- SizeRequirements var4 = this.columnRequirements[var2];
- var4.minimum = Math.max((int)var3.getMinimumSpan(var1), var4.minimum);
- var4.preferred = Math.max((int)var3.getPreferredSpan(var1), var4.preferred);
- var4.maximum = Math.max((int)var3.getMaximumSpan(var1), var4.maximum);
- }
-
- protected TableCell createTableCell(Element var1) {
- return new TableCell(this, var1);
- }
-
- protected TableRow createTableRow(Element var1) {
- return new TableRow(this, var1);
- }
-
- int getColumnCount() {
- return this.columnSpans.length;
- }
-
- int getColumnSpan(int var1) {
- return this.columnSpans[var1];
- }
-
- int getColumnsOccupied(View var1) {
- AttributeSet var2 = var1.getElement().getAttributes();
- String var3 = (String)var2.getAttribute(Attribute.COLSPAN);
- if (var3 != null) {
- try {
- return Integer.parseInt(var3);
- } catch (NumberFormatException var4) {
- }
- }
-
- return 1;
- }
-
- TableRow getRow(int var1) {
- return var1 < this.rows.size() ? (TableRow)this.rows.elementAt(var1) : null;
- }
-
- int getRowCount() {
- return this.rows.size();
- }
-
- int getRowSpan(int var1) {
- TableRow var2 = this.getRow(var1);
- return var2 != null ? (int)((View)var2).getPreferredSpan(1) : 0;
- }
-
- int getRowsOccupied(View var1) {
- AttributeSet var2 = var1.getElement().getAttributes();
- String var3 = (String)var2.getAttribute(Attribute.ROWSPAN);
- if (var3 != null) {
- try {
- return Integer.parseInt(var3);
- } catch (NumberFormatException var4) {
- }
- }
-
- return 1;
- }
-
- protected View getViewAtPosition(int var1, Rectangle var2) {
- int var3 = ((CompositeView)this).getViewCount();
-
- for(int var4 = 0; var4 < var3; ++var4) {
- View var5 = ((CompositeView)this).getView(var4);
- int var6 = var5.getStartOffset();
- int var7 = var5.getEndOffset();
- if (var1 >= var6 && var1 < var7) {
- if (var2 != null) {
- ((BoxView)this).childAllocation(var4, var2);
- }
-
- return var5;
- }
- }
-
- if (var1 == ((View)this).getEndOffset()) {
- View var8 = ((CompositeView)this).getView(var3 - 1);
- if (var2 != null) {
- ((BoxView)this).childAllocation(var3 - 1, var2);
- }
-
- return var8;
- } else {
- return null;
- }
- }
-
- void invalidateGrid() {
- this.gridValid = false;
- }
-
- protected void layoutColumns(int var1, int[] var2, int[] var3, SizeRequirements[] var4) {
- SizeRequirements.calculateTiledPositions(var1, (SizeRequirements)null, var4, var2, var3);
- }
-
- protected void layoutMinorAxis(int var1, int var2, int[] var3, int[] var4) {
- this.updateGrid();
- int var5 = this.getRowCount();
-
- for(int var6 = 0; var6 < var5; ++var6) {
- TableRow var7 = this.getRow(var6);
- ((BoxView)var7).layoutChanged(var2);
- }
-
- this.layoutColumns(var1, this.columnOffsets, this.columnSpans, this.columnRequirements);
- super.layoutMinorAxis(var1, var2, var3, var4);
- }
-
- public void replace(int var1, int var2, View[] var3) {
- super.replace(var1, var2, var3);
- this.invalidateGrid();
- }
-
- void updateGrid() {
- if (!this.gridValid) {
- this.rows.removeAllElements();
- int var1 = ((CompositeView)this).getViewCount();
-
- for(int var2 = 0; var2 < var1; ++var2) {
- View var3 = ((CompositeView)this).getView(var2);
- if (var3 instanceof TableRow) {
- this.rows.addElement(var3);
- TableRow var4 = (TableRow)var3;
- var4.clearFilledColumns();
- var4.setRow(var2);
- }
- }
-
- int var16 = 0;
- int var17 = this.rows.size();
-
- for(int var5 = 0; var5 < var17; ++var5) {
- TableRow var6 = this.getRow(var5);
- int var7 = 0;
-
- for(int var8 = 0; var8 < ((CompositeView)var6).getViewCount(); ++var7) {
- View var9;
- for(var9 = ((CompositeView)var6).getView(var8); var6.isFilled(var7); ++var7) {
- }
-
- int var10 = this.getRowsOccupied(var9);
- int var11 = this.getColumnsOccupied(var9);
- if (var11 > 1 || var10 > 1) {
- int var12 = var5 + var10;
- int var13 = var7 + var11;
-
- for(int var14 = var5; var14 < var12; ++var14) {
- for(int var15 = var7; var15 < var13; ++var15) {
- if (var14 != var5 || var15 != var7) {
- this.addFill(var14, var15);
- }
- }
- }
-
- if (var11 > 1) {
- var7 += var11 - 1;
- }
- }
-
- ++var8;
- }
-
- var16 = Math.max(var16, var7 + 1);
- }
-
- this.columnSpans = new int[var16];
- this.columnOffsets = new int[var16];
- this.columnRequirements = new SizeRequirements[var16];
-
- for(int var18 = 0; var18 < var16; ++var18) {
- this.columnRequirements[var18] = new SizeRequirements();
- }
-
- this.gridValid = true;
- }
-
- }
- }
-